package com.neusoft.controller;

import com.neusoft.entity.Register;
import com.neusoft.service.RegisterService;
import com.neusoft.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author akemihomurasama
 */
@RestController
@RequestMapping("/register")
@CrossOrigin
public class RegisterController {
    @Autowired
    private RegisterService registerService;

    /**
     * 添加患者信息
     *
     * @param register 患者信息
     * @return 添加结果
     */
    @RequestMapping("/patientRegister")
    public Result patientRegister(@RequestBody Register register) {
        return registerService.addPatient(register);
    }

    /**
     * 查询所有患者信息
     *
     * @return 患者信息列表
     */
    @RequestMapping("/queryAllPatient")
    public Result queryAllPatient() {
        return registerService.queryAllRegister();
    }

    /**
     * 根据医生查询患者
     *
     * @param employeeId 医生id
     * @return 患者列表
     */

    @RequestMapping("/queryPatientByDoc/{employeeId}")
    public Result queryPatientByDoc(@PathVariable String employeeId) {
        return registerService.queryPatientByDoc(employeeId);
    }

    /**
     * 根据医生id分页查询患者信息
     *
     * @param employeeId  医生id
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    @RequestMapping("/queryPatientByDocPage/{employeeId}/{currentPage}/{pageSize}")
    public Result queryPatientByDocPage(@PathVariable String employeeId,
                                        @PathVariable String currentPage, @PathVariable String pageSize) {
        return registerService.queryPatientByDocPage(employeeId,
                Integer.parseInt(currentPage), Integer.parseInt(pageSize));
    }

    /**
     * 根据患者信息查询患者列表
     *
     * @param register 患者信息
     * @param employeeId 医生id
     * @return 患者列表
     */
    @RequestMapping("/queryPatientByCondition/{employeeId}")
    public Result queryPatientByCondition(@RequestBody Register register, @PathVariable int employeeId) {
        return registerService.queryPatientByCondition(register, employeeId);
    }

    /**
     * 根据患者病历号更改患者状态为2
     *
     * @param caseNumber 患者病历号
     * @return 更新成功信息
     */
    @RequestMapping("/updatePatientState/{caseNumber}")
    public Result updatePatientState(@PathVariable String caseNumber) {
        return registerService.updatePatientState(caseNumber);
    }

    /**
     * 根据患者病历号查询患者信息
     *
     * @param caseNumber 患者病历号
     * @return 患者信息
     */
    @RequestMapping("/queryPatientByCaseNum/{caseNumber}")
    public Result queryPatientByCaseNum(@PathVariable String caseNumber) {
        return registerService.queryPatientByCaseNum(caseNumber);
    }

    /**
     * 根据患者看诊状态和医生id查询患者列表
     *
     * @param visitState 患者看诊状态
     * @param employeeId 医生id
     * @return 患者列表
     */
    @RequestMapping("/queryRegisterByStateAndDoc/{visitState}/{employeeId}")
    public Result queryRegisterByStateAndDoc(@PathVariable int visitState, @PathVariable int employeeId) {
        return registerService.queryRegisterByStateAndDoc(visitState, employeeId);
    }

    /**
     * 根据患者姓名或病历号查询患者信息
     *
     * @param register 患者相关信息
     * @return 患者信息
     */
    @RequestMapping("/queryPatientByNameOrCaseNum")
    public Result queryPatientByNameOrCaseNum(@RequestBody Register register) {
        return registerService.queryPatientByNameOrCaseNum(register);
    }

    /**
     * 根据患者id和医技项目id列表更新申请为已付款
     *
     * @param registerId 患者id
     * @param techIdList 医技项目id
     * @return 更新结果
     */
    @RequestMapping("/updateReqState/{registerId}")
    public Result updateReqState(@PathVariable("registerId") int registerId,
                                 @RequestBody List<Integer> techIdList) {
        return registerService.updateReqState(registerId, techIdList);
    }

    /**
     * 根据接诊状态和id分页查询查询患者信息列表
     *
     * @param visitState    接诊状态
     * @param patientIdList 患者id列表
     * @param currentPage   当前页数
     * @param pageSize      每页数量
     * @return 患者信息列表
     */
    @RequestMapping("/queryPatientByStateAndId/{visitState}/{currentPage}/{pageSize}")
    public Result queryPatientByStateAndId(@PathVariable("visitState") int visitState,
                                           @PathVariable("currentPage") int currentPage,
                                           @PathVariable("pageSize") int pageSize,
                                           @RequestBody List<Integer> patientIdList) {
        return registerService.queryPatientByStateAndId(visitState, patientIdList, currentPage, pageSize);
    }

    /**
     * 分页查询所有患者信息
     *
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    @RequestMapping("/queryRegisterByPage/{currentPage}/{pageSize}")
    public Result queryRegisterByPage(@PathVariable int currentPage, @PathVariable int pageSize) {
        return registerService.queryRegisterByPage(currentPage, pageSize);
    }

    /**
     * 查询患者总数
     *
     * @return 患者总数
     */
    @RequestMapping("/queryPatientCount")
    public Result queryPatientCount() {
        return registerService.queryPatientCount();
    }

    /**
     * 根据看诊状态分页查询患者信息
     *
     * @param state       看诊状态
     * @param currentPage 当前页码
     * @param pageSize    每页条数
     * @return 患者信息列表
     */
    @RequestMapping("/queryPatientByStateAndPage/{state}/{currentPage}/{pageSize}")
    public Result queryPatientByStateAndPage(@PathVariable int state, @PathVariable int currentPage, @PathVariable int pageSize) {
        return registerService.queryPatientByStateAndPage(state, currentPage, pageSize);
    }

    /**
     * 根据患者姓名、病历号和查询已挂号的患者信息
     *
     * @param register 患者查询条件
     * @return 结果列表
     */
    @RequestMapping("/queryPatientRefund")
    public Result queryPatientRefund(@RequestBody Register register) {
        return registerService.queryPatientRefund(register);
    }

    /**
     * 患者退号后修改患者看诊状态为已退号
     *
     * @param caseNumber 病历号
     * @return 修改结果
     */
    @RequestMapping("/patientRefund/{caseNumber}")
    public Result patientRefund(@PathVariable String caseNumber) {
        return registerService.patientRefund(caseNumber);
    }

    /**
     * 根据条件查询患者数量
     *
     * @param register 查询条件
     * @return 患者数量
     */
    @RequestMapping("/queryCountByCondition")
    public Result queryCountByCondition(@RequestBody Register register) {
        return registerService.queryCountByCondition(register);
    }

    /**
     * 患者完成看诊，设置患者状态为看诊结束
     *
     * @param caseNumber 患者病历id
     * @return 修改结果
     */
    @RequestMapping("/patientAccomplish/{caseNumber}")
    public Result patientAccomplish(@PathVariable String caseNumber) {
        return registerService.patientAccomplish(caseNumber);
    }
}
